package pers.mine.controller;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import pers.mine.po.GoodsItem;
import pers.mine.service.inter.GoodsItemService;
import pers.mine.vo.Cart;
import pers.mine.vo.Info;

/**
 * 购物车Controller 用于完成购物车的商品的一些操作
 * 
 * @author Mine
 * @since 2016年10月23日_下午8:49:18
 */
@Controller
@RequestMapping("/cart")
public class CartController {
	@Autowired
	GoodsItemService goodsItemService;
	private String rootPath = "/";
	private Info indexinfo = new Info();// 放到首页的信息

	/**
	 * 获得Cart页面
	 */
	@RequestMapping(value = "/show", method = RequestMethod.GET)
	public String adminLogin(Model model) {
		if (indexinfo.isCanChange()) {
			indexinfo.setType(Info.INFO);
			indexinfo.setMsg("欢迎来到[购物车信息页面]");
		} else {
			indexinfo.setCanChange(true);
		}
		model.addAttribute("indexinfo", indexinfo);
		return "cartPage";
	}

	/**
	 * 根据商品id以及数量添加商品
	 * 
	 * @param id
	 *            商品id
	 * @param num
	 *            数量
	 * @param sendPage
	 *            回送页面( 可能会转到首页或商品详细页)
	 * @param session
	 * @return
	 */
	@RequestMapping(value = "/add")
	public String addSome(Integer id, Integer num, String sendPage,
			Model model, HttpSession session) {
		if (sendPage == null || "".equals(sendPage.trim())) {
			return "redirect:indexshow";// 非法
		}
		System.out.println(rootPath);
		System.out.println(sendPage);
		indexinfo.setCanChange(false);
		Cart cartInfo = null;
		if (baseVali(id, num)) {// 基本验证通过
			cartInfo = this.getSessionCart(session);// 尝试获取购物车
			if (cartInfo == null) {
				cartInfo = new Cart();
			}
			// 根据id获取商品最新信息
			GoodsItem one = goodsItemService.getOneGoodsItemByID(id);
			if (one != null) {
				// 执行放入购物车操作
				if (cartInfo.put(one, num)) {
					// 更新session购物车
					session.setAttribute("cartInfo", cartInfo);
					indexinfo.setType(Info.SUCCESS);
					indexinfo.setMsg("[添加商品到购物车]:添加#" + id
							+ "号商品到购物车操作成功,可以使用[查看购物车功能]查看详细...");
					model.addAttribute("indexinfo", indexinfo);
					return "forward:" + rootPath + sendPage;
				} else {
					indexinfo.setMsg("[添加商品到购物车]:操作失败,非法商品数量...");
				}
			} else {
				indexinfo.setMsg("[添加商品到购物车]:操作失败,非法商品编号...");
			}
		} else {
			indexinfo.setMsg("[添加商品到购物车]:操作失败,请求非法...");
		}
		indexinfo.setType(Info.ERROR);
		model.addAttribute("indexinfo", indexinfo);// 因为要跳转到其他Controller
		return "forward:" + rootPath + sendPage;// 转发
	}

	/**
	 * 移除购物车指定商品
	 */
	@RequestMapping(value = "/remove")
	public String removeOne(Integer id, HttpSession session) {
		indexinfo.setCanChange(false);
		Cart cartInfo = null;
		cartInfo = this.getSessionCart(session);// 尝试获取购物车
		if (cartInfo != null) {
			if (cartInfo.remove(id)) {
				// 更新session购物车
				session.setAttribute("cartInfo", cartInfo);
				indexinfo.setType(Info.SUCCESS);
				indexinfo.setMsg("[购物车移除商品]:移除#" + id + "号商品成功...");
				return "redirect:show";// 重定向回购物车显示页
			} else {
				indexinfo.setMsg("[购物车移除商品]:操作失败,购物车不存在#" + id + "号商品...");
			}
		} else {
			indexinfo.setMsg("[购物车移除商品]:操作失败,购物车不存在...");
		}
		indexinfo.setType(Info.ERROR);
		return "redirect:show";// 重定向回购物车显示页
	}

	/**
	 * 清空购物车
	 */
	@RequestMapping(value = "/clear")
	public String clear(HttpSession session) {
		indexinfo.setCanChange(false);
		Cart cartInfo = null;
		cartInfo = this.getSessionCart(session);// 尝试获取购物车
		if (cartInfo != null) {
			cartInfo.clear();
			session.setAttribute("cartInfo", cartInfo);// 其实可以新new一个，罢了...
			indexinfo.setMsg("[清空购物车]:操作成功^_^");
			return "redirect:show";// 重定向回购物车显示页
		} else {
			indexinfo.setMsg("[清空购物车]:操作失败,购物车不存在...");
		}
		indexinfo.setType(Info.ERROR);
		return "redirect:show";// 重定向回购物车显示页
	}

	private boolean baseVali(Integer oneId, Integer oneNum) {
		// 数据合法性检测
		if (oneId == null || oneId < 1) {
			return false;
		}
		if (oneNum == null || oneNum < 1) {
			return false;
		}
		return true;
	}

	/**
	 * 获取session购物车，加入强转检测
	 * 
	 * @param session
	 * @return
	 */
	private Cart getSessionCart(HttpSession session) {
		Object obj = session.getAttribute("cartInfo");
		if (obj != null && obj instanceof Cart) {
			return (Cart) obj;
		}
		return null;
	}
}
